#!/usr/bin/env python3

import math
import os
import re
import subprocess
import shutil
import struct
import sys
import pokebase as pb


BASE_SPECIES = 1009

SPECIESLIST = [
    #'bulbasaur',
    #'ivysaur',
    #'venusaur',
    #'charmander',
    #'charmeleon',
    #'charizard',
    #'squirtle',
    #'wartortle',
    #'blastoise',
    #'caterpie',
    #'metapod',
    #'butterfree',
    #'weedle',
    #'kakuna',
    #'beedrill',
    #'pidgey',
    #'pidgeotto',
    #'pidgeot',
    #'rattata',
    #'raticate',
    #'spearow',
    #'fearow',
    #'ekans',
    #'arbok',
    #'pikachu',
    #'raichu',
    #'sandshrew',
    #'sandslash',
    #'nidoran-f',
    #'nidorina',
    #'nidoqueen',
    #'nidoran-m',
    #'nidorino',
    #'nidoking',
    #'clefairy',
    #'clefable',
    #'vulpix',
    #'ninetales',
    #'jigglypuff',
    #'wigglytuff',
    #'zubat',
    #'golbat',
    #'oddish',
    #'gloom',
    #'vileplume',
    #'paras',
    #'parasect',
    #'venonat',
    #'venomoth',
    #'diglett',
    #'dugtrio',
    #'meowth',
    #'persian',
    #'psyduck',
    #'golduck',
    #'mankey',
    #'primeape',
    #'growlithe',
    #'arcanine',
    #'poliwag',
    #'poliwhirl',
    #'poliwrath',
    #'abra',
    #'kadabra',
    #'alakazam',
    #'machop',
    #'machoke',
    #'machamp',
    #'bellsprout',
    #'weepinbell',
    #'victreebel',
    #'tentacool',
    #'tentacruel',
    #'geodude',
    #'graveler',
    #'golem',
    #'ponyta',
    #'rapidash',
    #'slowpoke',
    #'slowbro',
    #'magnemite',
    #'magneton',
    #'farfetchd',
    #'doduo',
    #'dodrio',
    #'seel',
    #'dewgong',
    #'grimer',
    #'muk',
    #'shellder',
    #'cloyster',
    #'gastly',
    #'haunter',
    #'gengar',
    #'onix',
    #'drowzee',
    #'hypno',
    #'krabby',
    #'kingler',
    #'voltorb',
    #'electrode',
    #'exeggcute',
    #'exeggutor',
    #'cubone',
    #'marowak',
    #'hitmonlee',
    #'hitmonchan',
    #'lickitung',
    #'koffing',
    #'weezing',
    #'rhyhorn',
    #'rhydon',
    #'chansey',
    #'tangela',
    #'kangaskhan',
    #'horsea',
    #'seadra',
    #'goldeen',
    #'seaking',
    #'staryu',
    #'starmie',
    #'mr-mime',
    #'scyther',
    #'jynx',
    #'electabuzz',
    #'magmar',
    #'pinsir',
    #'tauros',
    #'magikarp',
    #'gyarados',
    #'lapras',
    #'ditto',
    #'eevee',
    #'vaporeon',
    #'jolteon',
    #'flareon',
    #'porygon',
    #'omanyte',
    #'omastar',
    #'kabuto',
    #'kabutops',
    #'aerodactyl',
    #'snorlax',
    #'articuno',
    #'zapdos',
    #'moltres',
    #'dratini',
    #'dragonair',
    #'dragonite',
    #'mewtwo',
    #'mew',
    #'chikorita',
    #'bayleef',
    #'meganium',
    #'cyndaquil',
    #'quilava',
    #'typhlosion',
    #'totodile',
    #'croconaw',
    #'feraligatr',
    #'sentret',
    #'furret',
    #'hoothoot',
    #'noctowl',
    #'ledyba',
    #'ledian',
    #'spinarak',
    #'ariados',
    #'crobat',
    #'chinchou',
    #'lanturn',
    #'pichu',
    #'cleffa',
    #'igglybuff',
    #'togepi',
    #'togetic',
    #'natu',
    #'xatu',
    #'mareep',
    #'flaaffy',
    #'ampharos',
    #'bellossom',
    #'marill',
    #'azumarill',
    #'sudowoodo',
    #'politoed',
    #'hoppip',
    #'skiploom',
    #'jumpluff',
    #'aipom',
    #'sunkern',
    #'sunflora',
    #'yanma',
    #'wooper',
    #'quagsire',
    #'espeon',
    #'umbreon',
    #'murkrow',
    #'slowking',
    #'misdreavus',
    #'unown',
    #'wobbuffet',
    #'girafarig',
    #'pineco',
    #'forretress',
    #'dunsparce',
    #'gligar',
    #'steelix',
    #'snubbull',
    #'granbull',
    #'qwilfish',
    #'scizor',
    #'shuckle',
    #'heracross',
    #'sneasel',
    #'teddiursa',
    #'ursaring',
    #'slugma',
    #'magcargo',
    #'swinub',
    #'piloswine',
    #'corsola',
    #'remoraid',
    #'octillery',
    #'delibird',
    #'mantine',
    #'skarmory',
    #'houndour',
    #'houndoom',
    #'kingdra',
    #'phanpy',
    #'donphan',
    #'porygon2',
    #'stantler',
    #'smeargle',
    #'tyrogue',
    #'hitmontop',
    #'smoochum',
    #'elekid',
    #'magby',
    #'miltank',
    #'blissey',
    #'raikou',
    #'entei',
    #'suicune',
    #'larvitar',
    #'pupitar',
    #'tyranitar',
    #'lugia',
    #'ho-oh',
    #'celebi',
    #'treecko',
    #'grovyle',
    #'sceptile',
    #'torchic',
    #'combusken',
    #'blaziken',
    #'mudkip',
    #'marshtomp',
    #'swampert',
    #'poochyena',
    #'mightyena',
    #'zigzagoon',
    #'linoone',
    #'wurmple',
    #'silcoon',
    #'beautifly',
    #'cascoon',
    #'dustox',
    #'lotad',
    #'lombre',
    #'ludicolo',
    #'seedot',
    #'nuzleaf',
    #'shiftry',
    #'taillow',
    #'swellow',
    #'wingull',
    #'pelipper',
    #'ralts',
    #'kirlia',
    #'gardevoir',
    #'surskit',
    #'masquerain',
    #'shroomish',
    #'breloom',
    #'slakoth',
    #'vigoroth',
    #'slaking',
    #'nincada',
    #'ninjask',
    #'shedinja',
    #'whismur',
    #'loudred',
    #'exploud',
    #'makuhita',
    #'hariyama',
    #'azurill',
    #'nosepass',
    #'skitty',
    #'delcatty',
    #'sableye',
    #'mawile',
    #'aron',
    #'lairon',
    #'aggron',
    #'meditite',
    #'medicham',
    #'electrike',
    #'manectric',
    #'plusle',
    #'minun',
    #'volbeat',
    #'illumise',
    #'roselia',
    #'gulpin',
    #'swalot',
    #'carvanha',
    #'sharpedo',
    #'wailmer',
    #'wailord',
    #'numel',
    #'camerupt',
    #'torkoal',
    #'spoink',
    #'grumpig',
    #'spinda',
    #'trapinch',
    #'vibrava',
    #'flygon',
    #'cacnea',
    #'cacturne',
    #'swablu',
    #'altaria',
    #'zangoose',
    #'seviper',
    #'lunatone',
    #'solrock',
    #'barboach',
    #'whiscash',
    #'corphish',
    #'crawdaunt',
    #'baltoy',
    #'claydol',
    #'lileep',
    #'cradily',
    #'anorith',
    #'armaldo',
    #'feebas',
    #'milotic',
    #'castform',
    #'kecleon',
    #'shuppet',
    #'banette',
    #'duskull',
    #'dusclops',
    #'tropius',
    #'chimecho',
    #'absol',
    #'wynaut',
    #'snorunt',
    #'glalie',
    #'spheal',
    #'sealeo',
    #'walrein',
    #'clamperl',
    #'huntail',
    #'gorebyss',
    #'relicanth',
    #'luvdisc',
    #'bagon',
    #'shelgon',
    #'salamence',
    #'beldum',
    #'metang',
    #'metagross',
    #'regirock',
    #'regice',
    #'registeel',
    #'latias',
    #'latios',
    #'kyogre',
    #'groudon',
    #'rayquaza',
    #'jirachi',
    #'deoxys',
    #'turtwig',
    #'grotle',
    #'torterra',
    #'chimchar',
    #'monferno',
    #'infernape',
    #'piplup',
    #'prinplup',
    #'empoleon',
    #'starly',
    #'staravia',
    #'staraptor',
    #'bidoof',
    #'bibarel',
    #'kricketot',
    #'kricketune',
    #'shinx',
    #'luxio',
    #'luxray',
    #'budew',
    #'roserade',
    #'cranidos',
    #'rampardos',
    #'shieldon',
    #'bastiodon',
    #'burmy',
    #'wormadam',
    #'mothim',
    #'combee',
    #'vespiquen',
    #'pachirisu',
    #'buizel',
    #'floatzel',
    #'cherubi',
    #'cherrim',
    #'shellos',
    #'gastrodon',
    #'ambipom',
    #'drifloon',
    #'drifblim',
    #'buneary',
    #'lopunny',
    #'mismagius',
    #'honchkrow',
    #'glameow',
    #'purugly',
    #'chingling',
    #'stunky',
    #'skuntank',
    #'bronzor',
    #'bronzong',
    #'bonsly',
    #'mime-jr',
    #'happiny',
    #'chatot',
    #'spiritomb',
    #'gible',
    #'gabite',
    #'garchomp',
    #'munchlax',
    #'riolu',
    #'lucario',
    #'hippopotas',
    #'hippowdon',
    #'skorupi',
    #'drapion',
    #'croagunk',
    #'toxicroak',
    #'carnivine',
    #'finneon',
    #'lumineon',
    #'mantyke',
    #'snover',
    #'abomasnow',
    #'weavile',
    #'magnezone',
    #'lickilicky',
    #'rhyperior',
    #'tangrowth',
    #'electivire',
    #'magmortar',
    #'togekiss',
    #'yanmega',
    #'leafeon',
    #'glaceon',
    #'gliscor',
    #'mamoswine',
    #'porygon-z',
    #'gallade',
    #'probopass',
    #'dusknoir',
    #'froslass',
    #'rotom',
    #'uxie',
    #'mesprit',
    #'azelf',
    #'dialga',
    #'palkia',
    #'heatran',
    #'regigigas',
    #'giratina',
    #'cresselia',
    #'phione',
    #'manaphy',
    #'darkrai',
    #'shaymin',
    #'arceus',
    #'victini',
    #'snivy',
    #'servine',
    #'serperior',
    #'tepig',
    #'pignite',
    #'emboar',
    #'oshawott',
    #'dewott',
    #'samurott',
    #'patrat',
    #'watchog',
    #'lillipup',
    #'herdier',
    #'stoutland',
    #'purrloin',
    #'liepard',
    #'pansage',
    #'simisage',
    #'pansear',
    #'simisear',
    #'panpour',
    #'simipour',
    #'munna',
    #'musharna',
    #'pidove',
    #'tranquill',
    #'unfezant',
    #'blitzle',
    #'zebstrika',
    #'roggenrola',
    #'boldore',
    #'gigalith',
    #'woobat',
    #'swoobat',
    #'drilbur',
    #'excadrill',
    #'audino',
    #'timburr',
    #'gurdurr',
    #'conkeldurr',
    #'tympole',
    #'palpitoad',
    #'seismitoad',
    #'throh',
    #'sawk',
    #'sewaddle',
    #'swadloon',
    #'leavanny',
    #'venipede',
    #'whirlipede',
    #'scolipede',
    #'cottonee',
    #'whimsicott',
    #'petilil',
    #'lilligant',
    #'basculin',
    #'sandile',
    #'krokorok',
    #'krookodile',
    #'darumaka',
    #'darmanitan',
    #'maractus',
    #'dwebble',
    #'crustle',
    #'scraggy',
    #'scrafty',
    #'sigilyph',
    #'yamask',
    #'cofagrigus',
    #'tirtouga',
    #'carracosta',
    #'archen',
    #'archeops',
    #'trubbish',
    #'garbodor',
    #'zorua',
    #'zoroark',
    #'minccino',
    #'cinccino',
    #'gothita',
    #'gothorita',
    #'gothitelle',
    #'solosis',
    #'duosion',
    #'reuniclus',
    #'ducklett',
    #'swanna',
    #'vanillite',
    #'vanillish',
    #'vanilluxe',
    #'deerling',
    #'sawsbuck',
    #'emolga',
    #'karrablast',
    #'escavalier',
    #'foongus',
    #'amoonguss',
    #'frillish',
    #'jellicent',
    #'alomomola',
    #'joltik',
    #'galvantula',
    #'ferroseed',
    #'ferrothorn',
    #'klink',
    #'klang',
    #'klinklang',
    #'tynamo',
    #'eelektrik',
    #'eelektross',
    #'elgyem',
    #'beheeyem',
    #'litwick',
    #'lampent',
    #'chandelure',
    #'axew',
    #'fraxure',
    #'haxorus',
    #'cubchoo',
    #'beartic',
    #'cryogonal',
    #'shelmet',
    #'accelgor',
    #'stunfisk',
    #'mienfoo',
    #'mienshao',
    #'druddigon',
    #'golett',
    #'golurk',
    #'pawniard',
    #'bisharp',
    #'bouffalant',
    #'rufflet',
    #'braviary',
    #'vullaby',
    #'mandibuzz',
    #'heatmor',
    #'durant',
    #'deino',
    #'zweilous',
    #'hydreigon',
    #'larvesta',
    #'volcarona',
    #'cobalion',
    #'terrakion',
    #'virizion',
    #'tornadus',
    #'thundurus',
    #'reshiram',
    #'zekrom',
    #'landorus',
    #'kyurem',
    #'keldeo',
    #'meloetta',
    #'genesect',
    #'chespin',
    #'quilladin',
    #'chesnaught',
    #'fennekin',
    #'braixen',
    #'delphox',
    #'froakie',
    #'frogadier',
    #'greninja',
    #'bunnelby',
    #'diggersby',
    #'fletchling',
    #'fletchinder',
    #'talonflame',
    #'scatterbug',
    #'spewpa',
    #'vivillon',
    #'litleo',
    #'pyroar',
    #'flabebe',
    #'floette',
    #'florges',
    #'skiddo',
    #'gogoat',
    #'pancham',
    #'pangoro',
    #'furfrou',
    #'espurr',
    #'meowstic',
    #'honedge',
    #'doublade',
    #'aegislash',
    #'spritzee',
    #'aromatisse',
    #'swirlix',
    #'slurpuff',
    #'inkay',
    #'malamar',
    #'binacle',
    #'barbaracle',
    #'skrelp',
    #'dragalge',
    #'clauncher',
    #'clawitzer',
    #'helioptile',
    #'heliolisk',
    #'tyrunt',
    #'tyrantrum',
    #'amaura',
    #'aurorus',
    #'sylveon',
    #'hawlucha',
    #'dedenne',
    #'carbink',
    #'goomy',
    #'sliggoo',
    #'goodra',
    #'klefki',
    #'phantump',
    #'trevenant',
    #'pumpkaboo',
    #'gourgeist',
    #'bergmite',
    #'avalugg',
    #'noibat',
    #'noivern',
    #'xerneas',
    #'yveltal',
    #'zygarde',
    #'diancie',
    #'hoopa',
    #'volcanion',
    #'rowlet',
    #'dartrix',
    #'decidueye',
    #'litten',
    #'torracat',
    #'incineroar',
    #'popplio',
    #'brionne',
    #'primarina',
    #'pikipek',
    #'trumbeak',
    #'toucannon',
    #'yungoos',
    #'gumshoos',
    #'grubbin',
    #'charjabug',
    #'vikavolt',
    #'crabrawler',
    #'crabominable',
    #'oricorio',
    #'cutiefly',
    #'ribombee',
    #'rockruff',
    #'lycanroc',
    #'wishiwashi',
    #'mareanie',
    #'toxapex',
    #'mudbray',
    #'mudsdale',
    #'dewpider',
    #'araquanid',
    #'fomantis',
    #'lurantis',
    #'morelull',
    #'shiinotic',
    #'salandit',
    #'salazzle',
    #'stufful',
    #'bewear',
    #'bounsweet',
    #'steenee',
    #'tsareena',
    #'comfey',
    #'oranguru',
    #'passimian',
    #'wimpod',
    #'golisopod',
    #'sandygast',
    #'palossand',
    #'pyukumuku',
    #'type-null',
    #'silvally',
    #'minior',
    #'komala',
    #'turtonator',
    #'togedemaru',
    #'mimikyu',
    #'bruxish',
    #'drampa',
    #'dhelmise',
    #'jangmo-o',
    #'hakamo-o',
    #'kommo-o',
    #'tapu-koko',
    #'tapu-lele',
    #'tapu-bulu',
    #'tapu-fini',
    #'cosmog',
    #'cosmoem',
    #'solgaleo',
    #'lunala',
    #'nihilego',
    #'buzzwole',
    #'pheromosa',
    #'xurkitree',
    #'celesteela',
    #'kartana',
    #'guzzlord',
    #'necrozma',
    #'magearna',
    #'marshadow',
    #'poipole',
    #'naganadel',
    #'stakataka',
    #'blacephalon',
    #'zeraora',
    #'meltan',
    #'melmetal',
    #'grookey',
    #'thwackey',
    #'rillaboom',
    #'scorbunny',
    #'raboot',
    #'cinderace',
    #'sobble',
    #'drizzile',
    #'inteleon',
    #'skwovet',
    #'greedent',
    #'rookidee',
    #'corvisquire',
    #'corviknight',
    #'blipbug',
    #'dottler',
    #'orbeetle',
    #'nickit',
    #'thievul',
    #'gossifleur',
    #'eldegoss',
    #'wooloo',
    #'dubwool',
    #'chewtle',
    #'drednaw',
    #'yamper',
    #'boltund',
    #'rolycoly',
    #'carkol',
    #'coalossal',
    #'applin',
    #'flapple',
    #'appletun',
    #'silicobra',
    #'sandaconda',
    #'cramorant',
    #'arrokuda',
    #'barraskewda',
    #'toxel',
    #'toxtricity',
    #'sizzlipede',
    #'centiskorch',
    #'clobbopus',
    #'grapploct',
    #'sinistea',
    #'polteageist',
    #'hatenna',
    #'hattrem',
    #'hatterene',
    #'impidimp',
    #'morgrem',
    #'grimmsnarl',
    #'obstagoon',
    #'perrserker',
    #'cursola',
    #'sirfetchd',
    #'mr-rime',
    #'runerigus',
    #'milcery',
    #'alcremie',
    #'falinks',
    #'pincurchin',
    #'snom',
    #'frosmoth',
    #'stonjourner',
    #'eiscue',
    #'indeedee',
    #'morpeko',
    #'cufant',
    #'copperajah',
    #'dracozolt',
    #'arctozolt',
    #'dracovish',
    #'arctovish',
    #'duraludon',
    #'dreepy',
    #'drakloak',
    #'dragapult',
    #'zacian',
    #'zamazenta',
    #'eternatus',
    #'kubfu',
    #'urshifu',
    #'zarude',
    #'regieleki',
    #'regidrago',
    #'glastrier',
    #'spectrier',
    #'calyrex',
    #'wyrdeer',
    #'kleavor',
    #'ursaluna',
    #'basculegion',
    #'sneasler',
    #'overqwil',
    #'enamorus',
    #'sprigatito',
    #'floragato',
    #'meowscarada',
    #'fuecoco',
    #'crocalor',
    #'skeledirge',
    #'quaxly',
    #'quaxwell',
    #'quaquaval',
    #'lechonk',
    #'oinkologne',
    #'tarountula',
    #'spidops',
    #'nymble',
    #'lokix',
    #'pawmi',
    #'pawmo',
    #'pawmot',
    #'tandemaus',
    #'maushold',
    #'fidough',
    #'dachsbun',
    #'smoliv',
    #'dolliv',
    #'arboliva',
    #'squawkabilly',
    #'nacli',
    #'naclstack',
    #'garganacl',
    #'charcadet',
    #'armarouge',
    #'ceruledge',
    #'tadbulb',
    #'bellibolt',
    #'wattrel',
    #'kilowattrel',
    #'maschiff',
    #'mabosstiff',
    #'shroodle',
    #'grafaiai',
    #'bramblin',
    #'brambleghast',
    #'toedscool',
    #'toedscruel',
    #'klawf',
    #'capsakid',
    #'scovillain',
    #'rellor',
    #'rabsca',
    #'flittle',
    #'espathra',
    #'tinkatink',
    #'tinkatuff',
    #'tinkaton',
    #'wiglett',
    #'wugtrio',
    #'bombirdier',
    #'finizen',
    #'palafin',
    #'varoom',
    #'revavroom',
    #'cyclizar',
    #'orthworm',
    #'glimmet',
    #'glimmora',
    #'greavard',
    #'houndstone',
    #'flamigo',
    #'cetoddle',
    #'cetitan',
    #'veluza',
    #'dondozo',
    #'tatsugiri',
    #'annihilape',
    #'clodsire',
    #'farigiraf',
    #'dudunsparce',
    #'kingambit',
    #'great-tusk',
    #'scream-tail',
    #'brute-bonnet',
    #'flutter-mane',
    #'slither-wing',
    #'sandy-shocks',
    #'iron-treads',
    #'iron-bundle',
    #'iron-hands',
    #'iron-jugulis',
    #'iron-moth',
    #'iron-thorns',
    #'frigibax',
    #'arctibax',
    #'baxcalibur',
    #'gimmighoul',
    #'gholdengo',
    #'wo-chien',
    #'chien-pao',
    #'ting-lu',
    #'chi-yu',
    #'roaring-moon',
    #'iron-valiant',
    #'koraidon',
    #'miraidon',
    'walking-wake',
    'iron-leaves',
    'dipplin',
    'poltchageist',
    'sinistcha',
    'okidogi',
    'munkidori',
    'fezandipiti',
    'ogerpon',
    'archaludon',
    'hydrapple',
    'gouging-fire',
    'raging-bolt',
    'iron-boulder',
    'iron-crown',
    'terapagos',
    'pecharunt',
]


NAMESLIST = [
    #'Bulbasaur',
    #'Ivysaur',
    #'Venusaur',
    #'Charmander',
    #'Charmeleon',
    #'Charizard',
    #'Squirtle',
    #'Wartortle',
    #'Blastoise',
    #'Caterpie',
    #'Metapod',
    #'Butterfree',
    #'Weedle',
    #'Kakuna',
    #'Beedrill',
    #'Pidgey',
    #'Pidgeotto',
    #'Pidgeot',
    #'Rattata',
    #'Raticate',
    #'Spearow',
    #'Fearow',
    #'Ekans',
    #'Arbok',
    #'Pikachu',
    #'Raichu',
    #'Sandshrew',
    #'Sandslash',
    #'Nidoran♀',
    #'Nidorina',
    #'Nidoqueen',
    #'Nidoran♂',
    #'Nidorino',
    #'Nidoking',
    #'Clefairy',
    #'Clefable',
    #'Vulpix',
    #'Ninetales',
    #'Jigglypuff',
    #'Wigglytuff',
    #'Zubat',
    #'Golbat',
    #'Oddish',
    #'Gloom',
    #'Vileplume',
    #'Paras',
    #'Parasect',
    #'Venonat',
    #'Venomoth',
    #'Diglett',
    #'Dugtrio',
    #'Meowth',
    #'Persian',
    #'Psyduck',
    #'Golduck',
    #'Mankey',
    #'Primeape',
    #'Growlithe',
    #'Arcanine',
    #'Poliwag',
    #'Poliwhirl',
    #'Poliwrath',
    #'Abra',
    #'Kadabra',
    #'Alakazam',
    #'Machop',
    #'Machoke',
    #'Machamp',
    #'Bellsprout',
    #'Weepinbell',
    #'Victreebel',
    #'Tentacool',
    #'Tentacruel',
    #'Geodude',
    #'Graveler',
    #'Golem',
    #'Ponyta',
    #'Rapidash',
    #'Slowpoke',
    #'Slowbro',
    #'Magnemite',
    #'Magneton',
    #'Farfetch’d',
    #'Doduo',
    #'Dodrio',
    #'Seel',
    #'Dewgong',
    #'Grimer',
    #'Muk',
    #'Shellder',
    #'Cloyster',
    #'Gastly',
    #'Haunter',
    #'Gengar',
    #'Onix',
    #'Drowzee',
    #'Hypno',
    #'Krabby',
    #'Kingler',
    #'Voltorb',
    #'Electrode',
    #'Exeggcute',
    #'Exeggutor',
    #'Cubone',
    #'Marowak',
    #'Hitmonlee',
    #'Hitmonchan',
    #'Lickitung',
    #'Koffing',
    #'Weezing',
    #'Rhyhorn',
    #'Rhydon',
    #'Chansey',
    #'Tangela',
    #'Kangaskhan',
    #'Horsea',
    #'Seadra',
    #'Goldeen',
    #'Seaking',
    #'Staryu',
    #'Starmie',
    #'Mr. Mime',
    #'Scyther',
    #'Jynx',
    #'Electabuzz',
    #'Magmar',
    #'Pinsir',
    #'Tauros',
    #'Magikarp',
    #'Gyarados',
    #'Lapras',
    #'Ditto',
    #'Eevee',
    #'Vaporeon',
    #'Jolteon',
    #'Flareon',
    #'Porygon',
    #'Omanyte',
    #'Omastar',
    #'Kabuto',
    #'Kabutops',
    #'Aerodactyl',
    #'Snorlax',
    #'Articuno',
    #'Zapdos',
    #'Moltres',
    #'Dratini',
    #'Dragonair',
    #'Dragonite',
    #'Mewtwo',
    #'Mew',
    #'Chikorita',
    #'Bayleef',
    #'Meganium',
    #'Cyndaquil',
    #'Quilava',
    #'Typhlosion',
    #'Totodile',
    #'Croconaw',
    #'Feraligatr',
    #'Sentret',
    #'Furret',
    #'Hoothoot',
    #'Noctowl',
    #'Ledyba',
    #'Ledian',
    #'Spinarak',
    #'Ariados',
    #'Crobat',
    #'Chinchou',
    #'Lanturn',
    #'Pichu',
    #'Cleffa',
    #'Igglybuff',
    #'Togepi',
    #'Togetic',
    #'Natu',
    #'Xatu',
    #'Mareep',
    #'Flaaffy',
    #'Ampharos',
    #'Bellossom',
    #'Marill',
    #'Azumarill',
    #'Sudowoodo',
    #'Politoed',
    #'Hoppip',
    #'Skiploom',
    #'Jumpluff',
    #'Aipom',
    #'Sunkern',
    #'Sunflora',
    #'Yanma',
    #'Wooper',
    #'Quagsire',
    #'Espeon',
    #'Umbreon',
    #'Murkrow',
    #'Slowking',
    #'Misdreavus',
    #'Unown',
    #'Wobbuffet',
    #'Girafarig',
    #'Pineco',
    #'Forretress',
    #'Dunsparce',
    #'Gligar',
    #'Steelix',
    #'Snubbull',
    #'Granbull',
    #'Qwilfish',
    #'Scizor',
    #'Shuckle',
    #'Heracross',
    #'Sneasel',
    #'Teddiursa',
    #'Ursaring',
    #'Slugma',
    #'Magcargo',
    #'Swinub',
    #'Piloswine',
    #'Corsola',
    #'Remoraid',
    #'Octillery',
    #'Delibird',
    #'Mantine',
    #'Skarmory',
    #'Houndour',
    #'Houndoom',
    #'Kingdra',
    #'Phanpy',
    #'Donphan',
    #'Porygon2',
    #'Stantler',
    #'Smeargle',
    #'Tyrogue',
    #'Hitmontop',
    #'Smoochum',
    #'Elekid',
    #'Magby',
    #'Miltank',
    #'Blissey',
    #'Raikou',
    #'Entei',
    #'Suicune',
    #'Larvitar',
    #'Pupitar',
    #'Tyranitar',
    #'Lugia',
    #'Ho-oh',
    #'Celebi',
    #'Treecko',
    #'Grovyle',
    #'Sceptile',
    #'Torchic',
    #'Combusken',
    #'Blaziken',
    #'Mudkip',
    #'Marshtomp',
    #'Swampert',
    #'Poochyena',
    #'Mightyena',
    #'Zigzagoon',
    #'Linoone',
    #'Wurmple',
    #'Silcoon',
    #'Beautifly',
    #'Cascoon',
    #'Dustox',
    #'Lotad',
    #'Lombre',
    #'Ludicolo',
    #'Seedot',
    #'Nuzleaf',
    #'Shiftry',
    #'Taillow',
    #'Swellow',
    #'Wingull',
    #'Pelipper',
    #'Ralts',
    #'Kirlia',
    #'Gardevoir',
    #'Surskit',
    #'Masquerain',
    #'Shroomish',
    #'Breloom',
    #'Slakoth',
    #'Vigoroth',
    #'Slaking',
    #'Nincada',
    #'Ninjask',
    #'Shedinja',
    #'Whismur',
    #'Loudred',
    #'Exploud',
    #'Makuhita',
    #'Hariyama',
    #'Azurill',
    #'Nosepass',
    #'Skitty',
    #'Delcatty',
    #'Sableye',
    #'Mawile',
    #'Aron',
    #'Lairon',
    #'Aggron',
    #'Meditite',
    #'Medicham',
    #'Electrike',
    #'Manectric',
    #'Plusle',
    #'Minun',
    #'Volbeat',
    #'Illumise',
    #'Roselia',
    #'Gulpin',
    #'Swalot',
    #'Carvanha',
    #'Sharpedo',
    #'Wailmer',
    #'Wailord',
    #'Numel',
    #'Camerupt',
    #'Torkoal',
    #'Spoink',
    #'Grumpig',
    #'Spinda',
    #'Trapinch',
    #'Vibrava',
    #'Flygon',
    #'Cacnea',
    #'Cacturne',
    #'Swablu',
    #'Altaria',
    #'Zangoose',
    #'Seviper',
    #'Lunatone',
    #'Solrock',
    #'Barboach',
    #'Whiscash',
    #'Corphish',
    #'Crawdaunt',
    #'Baltoy',
    #'Claydol',
    #'Lileep',
    #'Cradily',
    #'Anorith',
    #'Armaldo',
    #'Feebas',
    #'Milotic',
    #'Castform',
    #'Kecleon',
    #'Shuppet',
    #'Banette',
    #'Duskull',
    #'Dusclops',
    #'Tropius',
    #'Chimecho',
    #'Absol',
    #'Wynaut',
    #'Snorunt',
    #'Glalie',
    #'Spheal',
    #'Sealeo',
    #'Walrein',
    #'Clamperl',
    #'Huntail',
    #'Gorebyss',
    #'Relicanth',
    #'Luvdisc',
    #'Bagon',
    #'Shelgon',
    #'Salamence',
    #'Beldum',
    #'Metang',
    #'Metagross',
    #'Regirock',
    #'Regice',
    #'Registeel',
    #'Latias',
    #'Latios',
    #'Kyogre',
    #'Groudon',
    #'Rayquaza',
    #'Jirachi',
    #'Deoxys',
    #'Turtwig',
    #'Grotle',
    #'Torterra',
    #'Chimchar',
    #'Monferno',
    #'Infernape',
    #'Piplup',
    #'Prinplup',
    #'Empoleon',
    #'Starly',
    #'Staravia',
    #'Staraptor',
    #'Bidoof',
    #'Bibarel',
    #'Kricketot',
    #'Kricketune',
    #'Shinx',
    #'Luxio',
    #'Luxray',
    #'Budew',
    #'Roserade',
    #'Cranidos',
    #'Rampardos',
    #'Shieldon',
    #'Bastiodon',
    #'Burmy',
    #'Wormadam',
    #'Mothim',
    #'Combee',
    #'Vespiquen',
    #'Pachirisu',
    #'Buizel',
    #'Floatzel',
    #'Cherubi',
    #'Cherrim',
    #'Shellos',
    #'Gastrodon',
    #'Ambipom',
    #'Drifloon',
    #'Drifblim',
    #'Buneary',
    #'Lopunny',
    #'Mismagius',
    #'Honchkrow',
    #'Glameow',
    #'Purugly',
    #'Chingling',
    #'Stunky',
    #'Skuntank',
    #'Bronzor',
    #'Bronzong',
    #'Bonsly',
    #'Mime Jr.',
    #'Happiny',
    #'Chatot',
    #'Spiritomb',
    #'Gible',
    #'Gabite',
    #'Garchomp',
    #'Munchlax',
    #'Riolu',
    #'Lucario',
    #'Hippopotas',
    #'Hippowdon',
    #'Skorupi',
    #'Drapion',
    #'Croagunk',
    #'Toxicroak',
    #'Carnivine',
    #'Finneon',
    #'Lumineon',
    #'Mantyke',
    #'Snover',
    #'Abomasnow',
    #'Weavile',
    #'Magnezone',
    #'Lickilicky',
    #'Rhyperior',
    #'Tangrowth',
    #'Electivire',
    #'Magmortar',
    #'Togekiss',
    #'Yanmega',
    #'Leafeon',
    #'Glaceon',
    #'Gliscor',
    #'Mamoswine',
    #'Porygon-Z',
    #'Gallade',
    #'Probopass',
    #'Dusknoir',
    #'Froslass',
    #'Rotom',
    #'Uxie',
    #'Mesprit',
    #'Azelf',
    #'Dialga',
    #'Palkia',
    #'Heatran',
    #'Regigigas',
    #'Giratina',
    #'Cresselia',
    #'Phione',
    #'Manaphy',
    #'Darkrai',
    #'Shaymin',
    #'Arceus',
    #'Victini',
    #'Snivy',
    #'Servine',
    #'Serperior',
    #'Tepig',
    #'Pignite',
    #'Emboar',
    #'Oshawott',
    #'Dewott',
    #'Samurott',
    #'Patrat',
    #'Watchog',
    #'Lillipup',
    #'Herdier',
    #'Stoutland',
    #'Purrloin',
    #'Liepard',
    #'Pansage',
    #'Simisage',
    #'Pansear',
    #'Simisear',
    #'Panpour',
    #'Simipour',
    #'Munna',
    #'Musharna',
    #'Pidove',
    #'Tranquill',
    #'Unfezant',
    #'Blitzle',
    #'Zebstrika',
    #'Roggenrola',
    #'Boldore',
    #'Gigalith',
    #'Woobat',
    #'Swoobat',
    #'Drilbur',
    #'Excadrill',
    #'Audino',
    #'Timburr',
    #'Gurdurr',
    #'Conkeldurr',
    #'Tympole',
    #'Palpitoad',
    #'Seismitoad',
    #'Throh',
    #'Sawk',
    #'Sewaddle',
    #'Swadloon',
    #'Leavanny',
    #'Venipede',
    #'Whirlipede',
    #'Scolipede',
    #'Cottonee',
    #'Whimsicott',
    #'Petilil',
    #'Lilligant',
    #'Basculin',
    #'Sandile',
    #'Krokorok',
    #'Krookodile',
    #'Darumaka',
    #'Darmanitan',
    #'Maractus',
    #'Dwebble',
    #'Crustle',
    #'Scraggy',
    #'Scrafty',
    #'Sigilyph',
    #'Yamask',
    #'Cofagrigus',
    #'Tirtouga',
    #'Carracosta',
    #'Archen',
    #'Archeops',
    #'Trubbish',
    #'Garbodor',
    #'Zorua',
    #'Zoroark',
    #'Minccino',
    #'Cinccino',
    #'Gothita',
    #'Gothorita',
    #'Gothitelle',
    #'Solosis',
    #'Duosion',
    #'Reuniclus',
    #'Ducklett',
    #'Swanna',
    #'Vanillite',
    #'Vanillish',
    #'Vanilluxe',
    #'Deerling',
    #'Sawsbuck',
    #'Emolga',
    #'Karrablast',
    #'Escavalier',
    #'Foongus',
    #'Amoonguss',
    #'Frillish',
    #'Jellicent',
    #'Alomomola',
    #'Joltik',
    #'Galvantula',
    #'Ferroseed',
    #'Ferrothorn',
    #'Klink',
    #'Klang',
    #'Klinklang',
    #'Tynamo',
    #'Eelektrik',
    #'Eelektross',
    #'Elgyem',
    #'Beheeyem',
    #'Litwick',
    #'Lampent',
    #'Chandelure',
    #'Axew',
    #'Fraxure',
    #'Haxorus',
    #'Cubchoo',
    #'Beartic',
    #'Cryogonal',
    #'Shelmet',
    #'Accelgor',
    #'Stunfisk',
    #'Mienfoo',
    #'Mienshao',
    #'Druddigon',
    #'Golett',
    #'Golurk',
    #'Pawniard',
    #'Bisharp',
    #'Bouffalant',
    #'Rufflet',
    #'Braviary',
    #'Vullaby',
    #'Mandibuzz',
    #'Heatmor',
    #'Durant',
    #'Deino',
    #'Zweilous',
    #'Hydreigon',
    #'Larvesta',
    #'Volcarona',
    #'Cobalion',
    #'Terrakion',
    #'Virizion',
    #'Tornadus',
    #'Thundurus',
    #'Reshiram',
    #'Zekrom',
    #'Landorus',
    #'Kyurem',
    #'Keldeo',
    #'Meloetta',
    #'Genesect',
    #'Chespin',
    #'Quilladin',
    #'Chesnaught',
    #'Fennekin',
    #'Braixen',
    #'Delphox',
    #'Froakie',
    #'Frogadier',
    #'Greninja',
    #'Bunnelby',
    #'Diggersby',
    #'Fletchling',
    #'Flechinder',
    #'Talonflame',
    #'Scatterbug',
    #'Spewpa',
    #'Vivillon',
    #'Litleo',
    #'Pyroar',
    #'Flabébé',
    #'Floette',
    #'Florges',
    #'Skiddo',
    #'Gogoat',
    #'Pancham',
    #'Pangoro',
    #'Furfrou',
    #'Espurr',
    #'Meowstic',
    #'Honedge',
    #'Doublade',
    #'Aegislash',
    #'Spritzee',
    #'Aromatisse',
    #'Swirlix',
    #'Slurpuff',
    #'Inkay',
    #'Malamar',
    #'Binacle',
    #'Barbaracle',
    #'Skrelp',
    #'Dragalge',
    #'Clauncher',
    #'Clawitzer',
    #'Helioptile',
    #'Heliolisk',
    #'Tyrunt',
    #'Tyrantrum',
    #'Amaura',
    #'Aurorus',
    #'Sylveon',
    #'Hawlucha',
    #'Dedenne',
    #'Carbink',
    #'Goomy',
    #'Sliggoo',
    #'Goodra',
    #'Klefki',
    #'Phantump',
    #'Trevenant',
    #'Pumpkaboo',
    #'Gourgeist',
    #'Bergmite',
    #'Avalugg',
    #'Noibat',
    #'Noivern',
    #'Xerneas',
    #'Yveltal',
    #'Zygarde',
    #'Diancie',
    #'Hoopa',
    #'Volcanion',
    #'Rowlett',
    #'Dartrix',
    #'Decidueye',
    #'Litten',
    #'Torracat',
    #'Incineroar',
    #'Popplio',
    #'Brionne',
    #'Primarina',
    #'Pikipek',
    #'Trumbeak',
    #'Toucannon',
    #'Yungoos',
    #'Gumshoos',
    #'Grubbin',
    #'Charjabug',
    #'Vikavolt',
    #'Crabrawler',
    #'Crabomnabl',
    #'Oricorio',
    #'Cutiefly',
    #'Ribombee',
    #'Rockruff',
    #'Lycanroc',
    #'Wishiwashi',
    #'Mareanie',
    #'Toxapex',
    #'Mudbray',
    #'Mudsdale',
    #'Dewpider',
    #'Araquanid',
    #'Fomantis',
    #'Lurantis',
    #'Morelull',
    #'Shiinotic',
    #'Salandit',
    #'Salazzle',
    #'Stufful',
    #'Bewear',
    #'Bounsweet',
    #'Steenee',
    #'Tsareena',
    #'Comfey',
    #'Oranguru',
    #'Passimian',
    #'Wimpod',
    #'Golisopod',
    #'Sandygast',
    #'Palossand',
    #'Pyukumuku',
    #'Type: Null',
    #'Silvally',
    #'Minior',
    #'Komala',
    #'Turtonator',
    #'Togedemaru',
    #'Mimikyu',
    #'Bruxish',
    #'Drampa',
    #'Dhelmise',
    #'Jangmo-o',
    #'Hakamo-o',
    #'Kommo-o',
    #'Tapu Koko',
    #'Tapu Lele',
    #'Tapu Bulu',
    #'Tapu Fini',
    #'Cosmog',
    #'Cosmoem',
    #'Solgaleo',
    #'Lunala',
    #'Nihilego',
    #'Buzzwole',
    #'Pheromosa',
    #'Xurkitree',
    #'Celesteela',
    #'Kartana',
    #'Guzzlord',
    #'Necrozma',
    #'Magearna',
    #'Marshadow',
    #'Poipole',
    #'Naganadel',
    #'Stakataka',
    #'Blacefalon',
    #'Zeraora',
    #'Meltan',
    #'Melmetal',
    #'Grookey',
    #'Thwackey',
    #'Rillaboom',
    #'Scorbunny',
    #'Raboot',
    #'Cinderace',
    #'Sobble',
    #'Drizzile',
    #'Inteleon',
    #'Skwovet',
    #'Greedent',
    #'Rookidee',
    #'Corvisquire',
    #'Corviknite',
    #'Blipbug',
    #'Dottler',
    #'Orbeetle',
    #'Nickit',
    #'Thievul',
    #'Gossifleur',
    #'Eldegoss',
    #'Wooloo',
    #'Dubwool',
    #'Chewtle',
    #'Drednaw',
    #'Yamper',
    #'Boltund',
    #'Rolycoly',
    #'Carkol',
    #'Coalossal',
    #'Applin',
    #'Flapple',
    #'Appletun',
    #'Silicobra',
    #'Sandaconda',
    #'Cramorant',
    #'Arrokuda',
    #'Baraskewda',
    #'Toxel',
    #'Toxtricity',
    #'Sizzlipede',
    #'Centskorch',
    #'Clobbopus',
    #'Grapploct',
    #'Sinistea',
    #'Poltegeist',
    #'Hatenna',
    #'Hattrem',
    #'Hatterene',
    #'Impidimp',
    #'Morgrem',
    #'Grimmsnarl',
    #'Obstagoon',
    #'Perrserker',
    #'Cursola',
    #'Sirfetch’d',
    #'Mr. Rime',
    #'Runerigus',
    #'Milcery',
    #'Alcremie',
    #'Falinks',
    #'Pincurchin',
    #'Snom',
    #'Frosmoth',
    #'Stonjorner',
    #'Eiscue',
    #'Indeedee',
    #'Morpeko',
    #'Cufant',
    #'Copperajah',
    #'Dracozolt',
    #'Arctozolt',
    #'Dracovish',
    #'Arctovish',
    #'Duraludon',
    #'Dreepy',
    #'Drakloak',
    #'Dragapult',
    #'Zacian',
    #'Zamazenta',
    #'Eternatus',
    #'Kubfu',
    #'Urshifu',
    #'Zarude',
    #'Regieleki',
    #'Regidrago',
    #'Glastrier',
    #'Spectrier',
    #'Calyrex',
    #'Wyrdeer',
    #'Kleavor',
    #'Ursaluna',
    #'Basculegion',
    #'Sneasler',
    #'Overqwil',
    #'Enamorus',
    #'Sprigatito',
    #'Floragato',
    #'Mewscarada',
    #'Fuecoco',
    #'Crocalor',
    #'Skeledirge',
    #'Quaxly',
    #'Quaxwell',
    #'Quaquaval',
    #'Lechonk',
    #'Oinkologne',
    #'Tarountula',
    #'Spidops',
    #'Nymble',
    #'Lokix',
    #'Pawmi',
    #'Pawmo',
    #'Pawmot',
    #'Tandemaus',
    #'Maushold',
    #'Fidough',
    #'Dachsbun',
    #'Smoliv',
    #'Dolliv',
    #'Arboliva',
    #'Squawkbily',
    #'Nacli',
    #'Naclstack',
    #'Garganacl',
    #'Charcadet',
    #'Armarouge',
    #'Ceruledge',
    #'Tadbulb',
    #'Bellibolt',
    #'Wattrel',
    #'Kilowatrel',
    #'Maschiff',
    #'Mabosstiff',
    #'Shroodle',
    #'Grafaiai',
    #'Bramblin',
    #'Bramblgast',
    #'Toedscool',
    #'Toedscruel',
    #'Klawf',
    #'Capsakid',
    #'Scovillain',
    #'Rellor',
    #'Rabsca',
    #'Flittle',
    #'Espathra',
    #'Tinkatink',
    #'Tinkatuff',
    #'Tinkaton',
    #'Wiglett',
    #'Wugtrio',
    #'Bombirdier',
    #'Finizen',
    #'Palafin',
    #'Varoom',
    #'Revavroom',
    #'Cyclizar',
    #'Orthworm',
    #'Glimmet',
    #'Glimmora',
    #'Greavard',
    #'Houndstone',
    #'Flamigo',
    #'Cetoddle',
    #'Cetitan',
    #'Veluza',
    #'Dondozo',
    #'Tatsugiri',
    #'Annihilape',
    #'Clodsire',
    #'Farigiraf',
    #'Dudunspars',
    #'Kingambit',
    #'Great Tusk',
    #'ScreamTail',
    #'BruteBonet',
    #'FluttrMane',
    #'SlithrWing',
    #'SandyShock',
    #'IronTreads',
    #'IronBundle',
    #'Iron Hands',
    #'Iron Neck',
    #'Iron Moth',
    #'Iron Thorn',
    #'Frigibax',
    #'Arctibax',
    #'Baxcalibur',
    #'Gimmighoul',
    #'Gholdengo',
    #'Wo-Chien',
    #'Chien-Pao',
    #'Ting-Lu',
    #'Chi-Yu',
    #'Roar Moon',
    #'Iron Valor',
    #'Koraidon',
    #'Miraidon',
    'Walk Wake',
    'Iron Leaf',
    'Dipplin',
    'Polchgeist',
    'Sinistcha',
    'Okidogi',
    'Munkidori',
    'Fezanditi',
    'Ogerpon',
    'Archaludon',
    'Hydrapple',
    'GougedFire',
    'RagingBolt',
    'IronBolder',
    'Iron Crown',
    'Terapagos',
    'Pecharunt',
]


IRREGULAR_SPECIES_NAMES = {
    '-----': 'NONE',
    'NIDORAN♀': 'NIDORAN_F',
    'NIDORAN♂': 'NIDORAN_M',
    'FARFETCH’D': 'FARFETCHD',
    'FARFETCH’_D': 'FARFETCHD',
    'MR. MIME': 'MR_MIME',
    'MR._MIME': 'MR_MIME',
    'HO-OH': 'HO_OH',
    'MIME JR.': 'MIME_JR',
    'MIME_JR.': 'MIMEJR',
    'PORYGON-Z': 'PORYGON_Z',
    'DEOXYS NORMAL': 'DEOXYS',
    'DEOXYS_NORMAL': 'DEOXYS',
    'DEOXYS_(_A)': 'DEOXYS_ATTACK',
    'DEOXYS_(_D)': 'DEOXYS_DEFENSE',
    'DEOXYS_(_S)': 'DEOXYS_SPEED',
    'WORMADAM_(_S)': 'WORMADAM_SANDY',
    'WORMADAM_(_T)': 'WORMADAM_TRASHY',
    'GIRATINA_(_O)': 'GIRATINA_ORIGIN',
    'SHAYMIN_(_S)': 'SHAYMIN_SKY',
    'ROTOM_(_HEAT)': 'ROTOM_HEAT',
    'ROTOM_(_WASH)': 'ROTOM_WASH',
    'ROTOM_(_FROST)': 'ROTOM_FROST',
    'ROTOM_(_FAN)': 'ROTOM_FAN',
    'ROTOM_(_MOW)': 'ROTOM_MOW',
    'MIME_JR': 'MIMEJR',
}


IRREGULAR_ABILITIES = {
    'COMPOUNDEYES': 'COMPOUND_EYES',
    'LIGHTNINGROD': 'LIGHTNING_ROD',
}


IRREGULAR_ITEMS = {
    'KING’S_ROCK': 'KINGS_ROCK',
    #'SILVER_POWDER': 'SILVERPOWDER',
    #'TINY_MUSHROOM': 'TINY_MUSHROOM',
    #'TWISTED_SPOON': 'TWISTEDSPOON',
    #'DEEP_SEA_SCALE': 'DEEPSEASCALE',
    #'DEEP_SEA_TOOTH': 'DEEPSEATOOTH',
    #'NEVER_MELT_ICE': 'NEVERMELTICE',
    #'BLACK_GLASSES': 'BLACKGLASSES',
    #'BRIGHT_POWDER': 'BRIGHTPOWDER',
    'STICK': 'LEEK',
    'PRETTY_WING': 'PRETTY_FEATHER',
}


IRREGULAR_EGG_GROUP = {
    'PLANT': 'GRASS',
    'WATER1': 'WATER_1',
    'WATER2': 'WATER_2',
    'WATER3': 'WATER_3',
    'GROUND': 'FIELD',
    'NO_EGGS': 'UNDISCOVERED',
    'NO EGGS': 'UNDISCOVERED',
    'INDETERMINATE': 'AMORPHOUS',
    'HUMANSHAPE': 'HUMAN_LIKE',
}


IRREGULAR_EXP_GROUP = {
    'MEDIUM': 'MEDIUM_FAST',
    'SLOW_THEN_VERY_FAST': 'ERRATIC',
    'FAST_THEN_VERY_SLOW': 'FLUCTUATING',
}






def upper_snake_case(s: str) -> str:
    return '_'.join(
        re.sub(
            '([A-Z][a-z]+)',
            r' \1',
            re.sub(
                '([A-Z]+)',
                r' \1',
                s.replace('-', ' ')
            )
        ).split()
    ).upper()



def sanitize(ability: str, sanitation_dict: dict[str, str]) -> str:
    snake = upper_snake_case(ability)
    if snake == '':
        return 'NONE'
    
    if snake in sanitation_dict:
        return sanitation_dict[snake]

    return snake


def replacenewline(interest: str) -> str:
    interest = interest.replace('\n', '\\n')
    interest = interest.replace('', '')
    return interest

#print(dir(currentMon))

dump_template = """

mondata SPECIES_{species}, "{namestr}"
    basestats {base_hp}, {base_atk}, {base_def}, {base_spe}, {base_spa}, {base_spd}
    types {type_1}, {type_2}
    catchrate {catch_rate}
    baseexp {exp_yield}
    evyields {ev_yield_hp}, {ev_yield_atk}, {ev_yield_def}, {ev_yield_spe}, {ev_yield_spa}, {ev_yield_spd}
    items ITEM_{item_uncommon}, ITEM_{item_rare}
    genderratio {gender_ratio}
    eggcycles {hatch_multi}
    basefriendship {base_friendship}
    growthrate GROWTH_{growth_rate}
    egggroups EGG_GROUP_{egg_group_1}, EGG_GROUP_{egg_group_2}
    abilities ABILITY_{ability_1}, ABILITY_{ability_2}
    runchance {run_chance}
    colorflip BODY_COLOR_{body_color}, {flip:d}
    mondexentry SPECIES_{species}, "{dexentry}"
    mondexclassification SPECIES_{species}, "{category}"
    mondexheight SPECIES_{species}, "{feet}’{inches:02d}”"
    mondexweight SPECIES_{species}, "{weight}.{deciweight} lbs.\""""

for i in range(0, len(SPECIESLIST)):
    currentMon = pb.APIResource('pokemon', i + BASE_SPECIES)
    currentMonBaseData = pb.APIResource('pokemon-species', SPECIESLIST[i])
    
    type_1=str(currentMon.types[0].type).upper(),
    type_2=str(currentMon.types[1 if len(currentMon.types) > 1 else 0].type).upper(),
    
    if ("FAIRY" in type_1[0]):
        type_1 = "(FAIRY_TYPE_IMPLEMENTED) ? TYPE_FAIRY : TYPE_NORMAL"
        type_1_fairy = 1
    else:
        type_1 = "TYPE_" + str(type_1[0])
        type_1_fairy = 0

    if ("FAIRY" in type_2[0]):
        type_2 = "(FAIRY_TYPE_IMPLEMENTED) ? TYPE_FAIRY : TYPE_NORMAL"
        if (type_1_fairy == 0):
            type_2 = "(FAIRY_TYPE_IMPLEMENTED) ? TYPE_FAIRY : " + type_1
    else:
        type_2 = "TYPE_" + str(type_2[0])
    
    for n in range(0, len(currentMonBaseData.genera)):
        if 'en' in currentMonBaseData.genera[n].language.name:
            categorystr = currentMonBaseData.genera[n].genus
    
    dexentrystr = ""
    for n in range(0, len(currentMonBaseData.flavor_text_entries)):
        if 'en' in currentMonBaseData.flavor_text_entries[n].language.name and ('heartgold' in currentMonBaseData.flavor_text_entries[n].version.name or (BASE_SPECIES+i) > (493-1)):
            dexentrystr = str(replacenewline(currentMonBaseData.flavor_text_entries[n].flavor_text))
    if dexentrystr == "":
        dexentrystr = "This is a newly discovered\\nPokémon."
    
    inchesstr = int(round(currentMon.height * 3.93701))
    feetstr = int(inchesstr / 12)
    inchesstr = inchesstr % 12
    
    deciweightstr = int(round(currentMon.weight * 2.20462))
    weightstr = int(deciweightstr / 10)
    deciweightstr = deciweightstr % 10
    
    if (len(currentMon.held_items) > 1):
        if currentMon.held_items[0].version_details[0].rarity > 5:
            item_uncommonstr = sanitize(str(currentMon.held_items[0].item.name).upper(), IRREGULAR_ITEMS)
            item_rarestr = sanitize(str(currentMon.held_items[1].item.name).upper(), IRREGULAR_ITEMS)
        else:
            item_uncommonstr = sanitize(str(currentMon.held_items[1].item.name).upper(), IRREGULAR_ITEMS)
            item_rarestr = sanitize(str(currentMon.held_items[0].item.name).upper(), IRREGULAR_ITEMS)
    elif (len(currentMon.held_items) > 0):
        if currentMon.held_items[0].version_details[0].rarity > 5: # only has an uncommon item
            item_uncommonstr = sanitize(str(currentMon.held_items[0].item.name).upper(), IRREGULAR_ITEMS)
            item_rarestr = "NONE"
        else: # only has rare item
            item_uncommonstr = "NONE"
            item_rarestr = sanitize(str(currentMon.held_items[0].item.name).upper(), IRREGULAR_ITEMS)
    else:
        item_uncommonstr = "NONE"
        item_rarestr = "NONE"
    
    dump_data = dump_template.format(
        species=sanitize(SPECIESLIST[i].upper(), IRREGULAR_SPECIES_NAMES),
        namestr=NAMESLIST[i],
        base_hp=currentMon.stats[0].base_stat,
        base_atk=currentMon.stats[1].base_stat,
        base_def=currentMon.stats[2].base_stat,
        base_spe=currentMon.stats[5].base_stat,
        base_spa=currentMon.stats[3].base_stat,
        base_spd=currentMon.stats[4].base_stat,
        type_1=type_1,
        type_2=type_2,
        catch_rate=currentMonBaseData.capture_rate,
        exp_yield="0 // defined in baseexp.s",
        ev_yield_hp=currentMon.stats[0].effort,
        ev_yield_atk=currentMon.stats[1].effort,
        ev_yield_def=currentMon.stats[2].effort,
        ev_yield_spe=currentMon.stats[5].effort,
        ev_yield_spa=currentMon.stats[3].effort,
        ev_yield_spd=currentMon.stats[4].effort,
        item_uncommon=item_uncommonstr,
        item_rare=item_rarestr,
        gender_ratio=math.floor(currentMonBaseData.gender_rate * 254 / 8) if currentMonBaseData.gender_rate > 0 else 255,
        hatch_multi=currentMonBaseData.hatch_counter,
        base_friendship=currentMonBaseData.base_happiness,
        growth_rate=sanitize(str(currentMonBaseData.growth_rate.name).upper(), IRREGULAR_EXP_GROUP),
        egg_group_1=sanitize(str(currentMonBaseData.egg_groups[0].name).upper(), IRREGULAR_EGG_GROUP) if len(currentMonBaseData.egg_groups) > 0 else "UNDISCOVERED",
        egg_group_2=sanitize(str(currentMonBaseData.egg_groups[1 if len(currentMonBaseData.egg_groups) > 1 else 0].name).upper(), IRREGULAR_EGG_GROUP) if len(currentMonBaseData.egg_groups) > 0 else "UNDISCOVERED",
        ability_1=sanitize(str(currentMon.abilities[0].ability.name), IRREGULAR_ABILITIES),
        ability_2=sanitize(str(currentMon.abilities[1].ability.name), IRREGULAR_ABILITIES) if len(currentMon.abilities) > 1 and int(currentMon.abilities[1].slot) == 2 else "NONE",
        run_chance=0, # probably breaks safari
        body_color=str(currentMonBaseData.color.name).upper(),
        flip=0,
        dexentry=dexentrystr,
        category=categorystr,
        feet=feetstr,
        inches=inchesstr,
        weight=weightstr,
        deciweight=deciweightstr,
    )
    
    print(dump_data)

    #mondata_dump.write(dump_data)
